//package com.mango.demo.threadpool;
//
//
//import com.mango.demo.threadcase3.Mycallable;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Qualifier;
//import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//
//import java.util.ArrayList;
//import java.util.List;
//import java.util.concurrent.*;
//
///**
// * @Author：wlz
// * @Package：threadpool
// * @Project：mythread
// * @name：MythreadPooldemo1
// * @Date：2023/3/28 21:02
// * @Filename：MythreadPooldemo1
// */
//@RestController
//@RequestMapping
//public class MythreadPooldemo1 {
//
//    @Qualifier("threadPoolTaskExecutor")
//    @Autowired
//    private ThreadPoolTaskExecutor threadPoolTaskExecutor;
//
//    public static void main(String[] args) throws ExecutionException, InterruptedException {
//        /**
//         * ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor
//         * (核心线程数量，最大线程数量，空闲线程最大存活时间，任务队列，创建线程工厂，任务的拒绝策略
//         *
//         * 参数一：核心线程数量             不能小于0
//         * 参数二：最大线程数              不能小于0，最大数量》=核心线程数量
//         * 参数三：空闲线程最大存活时间      不能小于0
//         * 参数四：时间单位                用TimeUnit 指定
//         * 参数五：任务队列                不能为null
//         * 参数六：创建线程工厂             不能为null
//         * 参数七：任务的拒绝策略            不能为null
//         *
//         */
//        ThreadPoolExecutor pool = new ThreadPoolExecutor(
//                3,//核心线程数量
//                6,//最大线程数，不能小于0，最大数量>= 核心线程数量
//                60,//空闲线程最大存活时间
//                TimeUnit.SECONDS,//时间单位
//                new LinkedBlockingDeque<>(100),
//                Executors.defaultThreadFactory(),
//                new ThreadPoolExecutor.CallerRunsPolicy()
//        );
//        //获取线程池对象
//        List<Callable<Integer>> list = new ArrayList<>();
//        for (int i = 0; i < 1000; i++) {
//            Mycallable mc = new Mycallable();
//            list.add(mc);
//        }
//
//        List<Future<Integer>> list1= pool.invokeAll(list);
//        for (Future<Integer> i:list1) {
//            System.out.println(i.get());
//        }
//        pool.shutdown();
//    }
//}
